﻿using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Persistencia_y_capa_de_negocio;

namespace clonegame
{
    public partial class formularioUnidadEditar : UserControl
    {
        private static readonly formularioUnidadEditar instancia = new formularioUnidadEditar();
        public static formularioUnidadEditar Instancia
        {
            get { return instancia; }
        }

        private ENUnidad unidad;
        public ENUnidad Un
        {
            get { return unidad; }
            set { unidad = value; }
        }

        public formularioUnidadEditar()
        {
            InitializeComponent();
            //gbDatos.Enabled = false;
            tbNombre.Enabled = false;
        }

        private void btBusqueda_Click(object sender, EventArgs e)
        {
            formularioUnidades form = formularioUnidades.Instancia;

            form.MuestraForm(formularioUnidadBuscar.Instancia);
        }

        /// <summary>
        /// Carga los datos de la unidad en el formulario.
        /// </summary>
        /// <param name="uni"></param>
        public void cargarDatos(string nombre, string defensa, string ataque, string velocidad, string vida, string tiempo, string descripcion)
        {
            try
            {
                epGuardar.SetError(btGuardar, "");

                tbNombre.Text = nombre;
                tbDefensa.Text = defensa;
                tbAtaque.Text = ataque;
                tbVelocidad.Text = velocidad;
                tbVida.Text = vida;
                tbTiempo.Text = tiempo;
                rtbDescripcion.Text = descripcion;

                string mdf = Application.ExecutablePath;
                mdf = mdf.Remove(mdf.LastIndexOf(@"\bin\"));

                string mdf2 = mdf.Remove(mdf.LastIndexOf(@"\clonegame"));
                mdf2 += @"\clonegame\imagenes\unidades\";

                ENUnidad uni = CADUnidad.Instancia.getUnidad(nombre);
                uni.Costes = CADRecurso.Instancia.getCostesUnidad(uni.Id);

                Un = uni;

                try
                {
                    pbImagen.Image = System.Drawing.Image.FromFile(mdf2 + nombre + ".png");
                }
                catch (Exception)
                {
                    pbImagen.Image = clonegame.Properties.Resources.ImgNoEncontrada;
                }

                lbCostes.Items.Clear();

                foreach (int i in uni.Costes)
                {
                    try
                    {
                        string nomb = CADRecurso.Instancia.getNombreRecurso(i);
                        lbCostes.Items.Add(nomb);
                    }
                    catch
                    {
                        // Ha habido un error pero continuamos
                        MessageBox.Show("Error rellenando la lista de costes");
                    }
                }
            }
            catch
            {

                MessageBox.Show("lol");
            }
            
        }

        public void BorraForm()
        {
            tbNombre.Text = "";
            tbDefensa.Text = "";
            tbTiempo.Text = "";
            tbVelocidad.Text = "";
            tbVida.Text = "";
            tbAtaque.Text = "";
            rtbDescripcion.Text = "";
            pbImagen.ImageLocation = "";
            tbNombre.Enabled = true;
            
            lbCostes.Items.Clear();
        }

        private void btGuardar_Click(object sender, EventArgs e)
        {
            // Comprobación de errores

            bool err = false;
            string error = "Faltan datos en : ";

            try
            {
                if (tbNombre.Text == "")
                {
                    error += "Nombre ";
                    err = true;
                }

                if (tbAtaque.Text.ToString() == "")
                {
                    error += "Ataque ";
                    err = true;
                }

                if (tbDefensa.Text.ToString() == "")
                {
                    error += "Defensa ";
                    err = true;
                }

                if (rtbDescripcion.Text == "")
                {
                    error += "Descripción ";
                    err = true;
                }

                if (tbTiempo.Text == "")
                {
                    error += "Tiempo ";
                    err = true;
                }

                if (tbVelocidad.Text == "")
                {
                    error += "Velocidad ";
                    err = true;
                }

                if (tbVida.Text == "")
                {
                    error += "Vida ";
                    err = true;
                }

                if (pbImagen.ImageLocation == "")
                {
                    error += "Imagen ";
                    err = true;
                }

                if (!err)
                {
                    epGuardar.SetError(btGuardar, "");

                    ENActividad act = new ENActividad();
                    // Relleno los datos de la unidad.

                    formularioUnidades.Instancia.Estado = "editar";

                    unidad.Nombre = tbNombre.Text;
                    unidad.Ataque = Convert.ToInt32(tbAtaque.Text);
                    unidad.Defensa = Convert.ToInt32(tbDefensa.Text);
                    unidad.Vida = Convert.ToInt32(tbVida.Text);
                    unidad.Velocidad = Convert.ToInt32(tbVelocidad.Text);
                    unidad.Tiempo = Convert.ToInt32(tbTiempo.Text);
                    unidad.Descripcion = rtbDescripcion.Text;
                    unidad.Admin = formularioMaestro.Instancia.UsuarioLogueado.CuentaAd;

                    if (CADUnidad.Instancia.InsertarUnidad(unidad))
                    {
                        MessageBox.Show("Unidad creada correctamente", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        // Insertamos la actividad.

                        string origen = pbImagen.ImageLocation;
                        string destino = Application.ExecutablePath;
                        destino = destino.Remove(destino.LastIndexOf(@"\bin\"));
                        destino += @"\imagenes\unidades";
                        destino += @"\" + tbNombre.Text + ".png";

                        // Código para trasladar la imágen también a la web.
                        string destinoWeb = Application.ExecutablePath;
                        destinoWeb = destinoWeb.Remove(destinoWeb.LastIndexOf(@"\clonegame\"));
                        destinoWeb += @"\webclonegame\FormulariosPrivada\ImagenesPrivada\unidades";
                        destinoWeb += @"\" + tbNombre.Text + ".png";

                        File.Copy(origen, destino);
                        File.Copy(origen, destinoWeb);

                        act.Accion = "Alta";
                        act.Responsable = formularioMaestro.Instancia.UsuarioLogueado.CuentaAd;
                        act.Descripcion = "Ha dado de alta una nueva unidad.";
                        act.Fecha = DateTime.Now.ToString();
                        CADActividad.Instancia.InsertarActividad(act);
                    }
                    else
                    {

                        act.Accion = "Modificación";
                        act.Responsable = formularioMaestro.Instancia.UsuarioLogueado.CuentaAd;
                        act.Descripcion = "Ha modificado la unidad " + tbNombre.Text + ".";
                        act.Fecha = DateTime.Now.ToString();

                        CADActividad.Instancia.InsertarActividad(act);
                    }

                    // Metemos los costes en la bd
                    CADRecurso.Instancia.AnadeCostesUnidad(Un.Id, Un.Costes);

                    formularioUnidades form = formularioUnidades.Instancia;

                    form.RellenaDGV(true, form.Pagina, form.RowsPaginas);

                    // Actualizamos el DGV de bienvenida.
                    formularioBienvenida.Instancia.actualizaResumen();

                    tbNombre.Enabled = false;
                }
                else
                {
                    epGuardar.SetIconAlignment(btGuardar, ErrorIconAlignment.MiddleLeft);
                    epGuardar.SetError(btGuardar, error);
                }
            }
            catch (Exception ex)
            {
                epGuardar.SetIconAlignment(btGuardar, ErrorIconAlignment.MiddleLeft);
                epGuardar.SetError(btGuardar, ex.Message);
            }
            
        }

        private void Restaurar_Click(object sender, EventArgs e)
        {
            ENUnidad un = CADUnidad.Instancia.getUnidad(tbNombre.Text);

            cargarDatos(un.Nombre, un.Defensa.ToString(), un.Ataque.ToString(), un.Velocidad.ToString(), un.Vida.ToString(), un.Tiempo.ToString(), un.Descripcion);
        }

        private void btModificarCostes_Click(object sender, EventArgs e)
        {
            formularioUnidades.Instancia.Estado = "editando";
            formularioUnidadEditarCostes form = new formularioUnidadEditarCostes();
            form.NombreUnidad = tbNombre.Text;
            form.ShowDialog();
        }

        private void btExaminar_Click(object sender, EventArgs e)
        {
            formularioUnidades.Instancia.Estado = "editando";
            OpenFileDialog imagen = new OpenFileDialog();
            imagen.Filter = "png (*.png)|*.png";
            pbImagen.SizeMode = PictureBoxSizeMode.StretchImage;

            if (imagen.ShowDialog() == DialogResult.OK)
            {
                // Hemos seleccionado una imagen.
                // Ahora queremos copiarla.

                string origen = imagen.FileName;

                pbImagen.ImageLocation = origen;
            }
        }

        private void EstEditando(object sender, KeyEventArgs e)
        {
            formularioUnidades.Instancia.Estado = "editando";
        }
    }
}
